#!/bin/bash

##########################################
# SSOO Grupo 06 - 2012, 2° Cuatrimestre  #
#         Comando detectaW5.sh           #
##########################################

# Este comando no utiliza opciones o argumentos. Sin embargo los comandos que lo invocan, lo ejecutan en 
# segundo plano de la siguiente forma: ./detectaW5.sh &

sleep_time=10 # intervalo de tiempo de suspension del daemon

SYSFILE=sistemas
LOGGER_EXE="perl ${BINDIR}LoguearW5.pl"

cod_se=666
comando_log="detectaW5.sh"

iniciar_buscarW5 (){
	pid_buscar=$(pidof -x buscarW5.sh)
	if [ "${pid_buscar}1" != "1" ]; then # Proceso existe => Alerta => Termina
		$LOGGER_EXE -m="El proceso buscarW5 ya esta corriendo.PID: ${pid_buscar}" -a -l="$comando_log"
	else
		# Ejecuta buscarW5.sh
		if [ ! -f "${BINDIR}buscarW5.sh" ]; then # Verifica existencia
			$LOGGER_EXE -e -c="124"	# Archivo inexistente
		else
			if [ ! -x "${BINDIR}buscarW5.sh" ]; then # Verifica permisos de ejecucion
				$LOGGER_EXE -e -c="710"
			else
				${BINDIR}buscarW5.sh & # Ejecuta en paralelo
			fi
		fi
	fi
}

# Comienzo del demonio.
$LOGGER_EXE -m="Inicio de ejecucion de comando DetectaW5." -i -l=${comando_log}
i=0
while :
do
	if [ $i != 0 ]
	then
		sleep $sleep_time # La primer iteracion se saltea.
	else
		i=1
	fi

	# Verifica si ARRIDIR essta vacio
	if [ $(ls $ARRIDIR | wc -l) == "0" ]
	then
		echo "no files in ARRIDIR"
		$LOGGER_EXE -m="No se encontraron archivos en ARRIDIR." -i -l=${comando_log}
	fi

	for FILE in `find $ARRIDIR -type f -exec basename "{}" \; | grep ^[a-Z][^_]*_[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$`; do
		# Muevo todos los archivos que contemplan el formato de nombre: string_nnnn-nn-nn

		# Get fecha del archivo
		fileDate=$(basename $FILE | cut -d "_" -f2)	#YYYY-mm-dd
		if [[  $fileDate != [0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] ]];
		then
			moverW5 "${ARRIDIR}${FILE}" "$RECHDIR" detectaW5.sh
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Fecha invalida." -a -l=${comando_log}
			continue
		fi

		filedateSec=$(date -d $fileDate +%s) #paso a segundos a partir de 1970-01-01
		
		# Fecha actual
		Now_tmp=$(date +%F)
		NowSec=$(date -d $Now_tmp +%s)
		
		if [ $filedateSec -gt $NowSec ]; # FileDate > NOW : Fecha futura.
		then
			moverW5 "${ARRIDIR}${FILE}" "$RECHDIR" detectaW5.sh
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Fecha posterior a fecha actual." -a -l=${comando_log}
			continue
		fi

		# Verifico el codigo del archivo con archivo MAESTRO
		# File ID
		fileId=$(basename $FILE | cut -d "_" -f1)
		# Veo si existe en el archivo maestro
		if [ $(grep -c ^$fileId,[^,][^,]*,[^,][^,]*,[^,]*$ ${MAEDIR}$SYSFILE) == 0 ]
		then
			moverW5 "${ARRIDIR}${FILE}" "$RECHDIR" detectaW5.sh
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Sistema inexistente." -a -l=${comando_log}	
			continue
		fi

		# Ver que el archivo maestro se recorre hasta la primera aparición del id (luego break)
		# Match SIS_ID,?*,?*,* || (sis_baja puede ser nula)
		while read -r SIS; do
			[[ $(echo $SIS | cut -f1 -d ",") != "$fileId" ]] && continue
			tmp_sis_alta=$(echo $SIS | cut -f3 -d ",") 
			sis_alta=$(date -d $tmp_sis_alta +%s)
			tmp_sis_baja=$(echo $SIS | cut -f4 -d ",")
			sis_baja=""
			if [ "$tmp_sis_baja" != "" ]; then
				sis_baja=$(date -d $tmp_sis_baja +%s)
			fi
			break
		done <${MAEDIR}$SYSFILE
		
		# FileDate < SIS_ALTA
		if [ $filedateSec -lt $sis_alta ]; then
			moverW5 "${ARRIDIR}$FILE" "$RECHDIR" detectaW5.sh
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Fecha anterior a fecha de alta." -a -l=${comando_log}	
			continue
		fi

		# FileDate > SIS_BAJA
		if [ "${filedateSec}1" -gt "${sis_baja}1" ]
		then
			moverW5 "${ARRIDIR}$FILE" "$RECHDIR" detectaW5.sh
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Fecha posterior a fecha baja del sistema." -a -l=${comando_log}	
			continue
		else # no hubo errores. Archivo valido!
			moverW5 "${ARRIDIR}$FILE" "$ACEPDIR" detectaW5.sh
			$LOGGER_EXE -m="Archivo \"$FILE\" aceptado." -i -l=${comando_log}
			continue
		fi
	done
	IFS=$'^'
	for FILE in $(ls -1 $ARRIDIR); # in `find $ARRIDIR` # recorre los arhivos que no contemplaban el formato
	do
		unset IFS
		[[ -d "$FILE" ]] && continue
		moverW5 "$FILE" "$RECHDIR" detectaW5.sh
		if [ -f "$FILE" ]; then
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Formato de nombre invalido."  -a -l=${comando_log}
		else
			$LOGGER_EXE -m="Archivo \"$FILE\" rechazado. Formato de archivo invalido. No es un archivo regular."  -a -l=${comando_log}
		fi
		IFS=$'^'
	done
	unset IFS

	# Verifico que ACEPDIR tenga archivos
	if [ $(ls $ACEPDIR | wc -l) -gt 0 ]; then
		$LOGGER_EXE -m="El directorio de archivos aceptados \"$ACEPDIR\" no esta vacio. Se ejecuta el comando \"buscarW5\".." -i -l="$comando_log"
		# Invoco BuscarW5
		iniciar_buscarW5
	fi
done
